- 首先我们了解一下在redhat5.8系统启动过程:POST(cpu,Memory)--> BIOS基本输入输出系统--BOOT Squen(启动)-->MBR(512字节)-->Boot Loader(446字节)(代码)-->Kernel(初始化)-->/sbin/init(/etc/inittab)
- 一、看一下系统常见的故障:
- 1、bash损坏:
- 现象:此时你会无法登录到系统
- 解决:进入到救援模式下
- linux rescue 进入到救援模式
- mkdir /mnt/boot 在/mnt下新建boot目录
- mount /dev/hdc /mnt/boot 挂载光盘
- cd /mnt/boot/Server 切换到光盘里
- rpm -ivh --replacepkgs bash-3.2.32.el5.i386.rpm --root /mnt/sysimage/ 安装bash包
- chroot /mnt/sysimage 查看最后效果chroot成功
- 2、grub文件损坏:
- 现象:此时会提示符:grub>
- 解决:进入到救援模式下
- linux rescue 进入到救援模式
- chroot /mnt/sysimage 表示chroot真正系统里
- cd boot/grub
- vim grub.conf
- default =0
- timeout =3
- title mylinux
- root (hd0,0)
- kernel /vmlinuz-2.6.18-308.el5
- initrd /initrd-2.6.18-308.el5.img
- 3.系统会莫名奇怪的重启:
- 原因:请回忆一下系统启动过程,检查/etc/inittab里面的内容
- 1、查看默认的启动类型,然后依次看一下系统启动级别从0-6
- 2、查看一下/etc/rc.d/sysinit里面的内容,是否设置了重启
- 3、查看一下/etc/rc.d/下面的文件
- 4、查看一下是否设置了计划任务等
- 二、、创建一个空间大小为10G的RAID5设备;其chuck大小为32k;要求此设备开机时可以自动挂载至/backup目录
- raid5:使用三个5G进行创建
- 1、[root@localhost ~]# fdisk -l
- Disk /dev/sda: 343.5 GB, 343597383680 bytes
- 255 heads, 63 sectors/track, 41773 cylinders
- Units = cylinders of 16065 * 512 = 8225280 bytes
- Device Boot Start End Blocks Id System
- /dev/sda1 * 1 13 104391 83 Linux
- /dev/sda2 14 5235 41945715 8e Linux LVM
- /dev/sda3 5236 5366 1052257+ 82 Linux swap / Solaris
- Disk /dev/sdb: 21.4 GB, 21474836480 bytes
- 255 heads, 63 sectors/track, 2610 cylinders
- Units = cylinders of 16065 * 512 = 8225280 bytes
- Device Boot Start End Blocks Id System
- 2、fdisk /dev/sda 进入磁盘创建分区
- 注意,最后不要忘记调整raid的标识号fd
- 3、使用fdisk -l /dev/sda 查看一下
- 4、partprobe /dev/sda 让系统识别一下这个分区
- 5、[root@localhost ~]# mdadm -C /dev/md1 -a yes -c 32 -l 5 -n 3 /dev/sda{5,6,7} 使用mdadm创建raid5
- mdadm: array /dev/md1 started.
- [root@localhost ~]#
- 6、[root@localhost ~]# mke2fs -j /dev/md1 格式化成ext3文件系统
- [root@localhost ~]# mkdir /backup
- [root@localhost ~]# vim /etc/fstab
- /dev/md1 /backup ext3 defaults 0 0
- 7、[root@localhost ~]# mount -a 进行挂载
- [root@localhost ~]# mount 查看最终挂载的效果
- 三、创建一个由两个物理卷组成的大小为20G的卷组myvg,要求其PE大小为8M;而后在此卷组中创建一个大小为5G的逻辑卷lv1,此逻辑卷要能在开机后自动挂载至/users目录
- 使用2个10G的pv进行创建
- 1、先分好区,不要忘记改LVM的标识符8e
- 2、partprobe /dev/sda
- 3、pvcreate /dev/sda{8,9}
- 4、vgcreate -s 8M myvg /dev/sda{8,9}
- 5、lvcreate -L 5G -n lv1 myvg
- 6、mke2fs -j /dev/myvg/lv1
- 7、mkdir /users
- vim /etc/fstab
- /dev/myvg/lv1 /users ext3 defaults 0 0
- 8、mount -a
- mount
- 四、4、完成以下任务:
- (1)新建系统组mysql;新建系统用户mysql,要求其没有家目录且shell为/sbin/nologin;
- (2)新建GID为600的组magedu;新建用户gentoo,要求其家目录为/users/gentoo,密码同用户名;
- (3)新建用户centos,其家目录为/users/centos,密码同用户名;
- (4)新建用户www,其家目录为/users/www;删除www用户,但保留其家目录;
- (5)用户gentoo和centos均以magedu为其附加组;
- (1)useradd -r -s /sbin/nologin mysql
- (2)groupadd -g 600 magedu
- useradd -d /users/gentoo gentoo
- echo gentoo |passwd --stdin gentoo
- (3)useradd -d /users/centos centos
- echo centos |passwd --stdin centos
- (4)useradd -d /users/www
- (5)usermod -a -G magedu gentoo
- usermod -a -G magedu centos
- 五、创建一个2G的分区,文件系统为ext3,卷标为DATA,块大小为1024,预留管理空间为磁盘分区的3%,要求开机后可以自动挂载至/data目录,并且自动挂载的设备要使用卷标进行引用
- 1、创建分区
- fdisk /dev/sda
- 2、parprobe /dev/sda
- 3、mke2fs -j -L DATA -m 3 /dev/sda10
- 4、mkdir /data
- vim /etc/fstab
- LABEL=DATA /data ext3 defaults,acl 0 0
- 5、mount -a
- mount
- 六、缩减前面创建的逻辑卷lv1的大小至2G;要求gentoo的家目录等不能丢失;缩减完成后以gentoo用户的身份下载http://172.16.0.1/pub/Sources/new_lamp/httpd-2.2.19.tar.bz2至gentoo自己的家目录;
- 1、卸载/users
- unmount /users
- 2、e2fsck -f /dev/myvg/lv1
- 3、resize2fs /dev/myvg/lv1 2G
- 4、lvreduce -L 2G /dev/myvg/lv1
- 5、mount -a
- mount
- 6、su - gentoo
- wget http://172.16.0.1/pub/Sources/new_lamp/httpd-2.2.19.tar.bz2
- 七、复制文件/var/log/messages至/data目录,其属主为root用户,属组为root组;要求此文件可以被任何人读取,可以被gentoo用户和magedu组读写,但centos没有任何访问权限
- mount -o remount /data
- [root@localhost centos]# cp /var/log/messages /data/
- [root@localhost data]# getfacl messages
- # file: messages
- # owner: root
- # group: root
- user::rw-
- group::---
- other::---
- chmod o=x
- 此时测试任何人都能读取这个messages
- setfacl -m u:gentoo:rw- messages
- setfacl -m g:magedu:rw- messages
- setfacl -m u:centos:--- messages
- [root@localhost data]# getfacl messages
- # file: messages
- # owner: root
- # group: root
- user::rw-
- user:gentoo:rw-
- user:centos:---
- group::---
- group:magedu:rw-
- mask::rw-
- other::r--
- 八、配置本地的yum源,其访问路径yum源为http://172.16.0.1/yum/{Server,Cluster,ClusterStorage,VT,errata},
- 而后安装mysql-server和httpd软件包;
- 1、cd /etc/yum.repos.d
- touch server.repo
- vim server.repo
- [Server]
- name=Server
- baseurl=http://172.16.0.1/yum/Server
- gpgcheck=0
- [Cluster]
- name=Cluster
- baseurl=http://172.16.0.1/yum/Cluster
- gpgcheck=0
- [ClusterStorage]
- name=ClusterStorage
- baseurl=http://172.16.0.1/yum/ClusterStorage
- gpgcheck=0
- [VT]
- name=VT
- baseurl=http://172.16.0.1/yum/VT
- gpgcheck=0
- [errata]
- name=errata
- baseurl=http://172.16.0.1/yum/errata
- gpgcheck=0
- yum -y install httpd mysql-server
- 九、下载并编译安装vsftpd;软件包所在的地址:ftp://172.16.0.1/pub/Sources/vsftpd;要求:
- 1)软件的默认安装目录为/usr/local,配置文件的安装路径为/etc/vsftpd目录;
- 2)安装完成以后,启动此服务,要求:匿名用户可以上传文件至/var/ftp/incoming目录中,而且可以删除文件或重命名文件,也可创建子目录;
- 提示:请关闭selinux,而且系统重启后使用其默认也为permissive状态或disable状态
- 1、setfenforce 0 关闭selinux
- 2、下载vsftpd软件
- wget ftp://172.16.0.1/pub/Sources/vsftpd
- 3、141 tar -xf vsftpd-2.3.5.tar.gz
- 142 cd vsftpd-2.3.5
- 143 id ftp
- 144 id nobody
- 145 finger ftp
- 146 mkdir /var/ftp
- 147 make && make install
- 148 mkdir -pv /etc/vsftpd
- 149 cp vsftpd.conf /etc/vsftpd/
- 4、 vim /etc/vsftpd/vsftp.conf
- 需要修改的选项:
- write_enable=YES
- anon_upload_enable=YES
- anon_mkdir_write_enable=YES
- anon_other_write_enable=YES
- 5、mkdir /var/ftp/incoming
- chown ftp:ftp /var/ftp/incoming/
- 6、启动vsftpd
- /usr/local/sbin/vsftpd /etc/vsftpd/vsftpd.conf &
- 7、查看一下端口
- [root@localhost vsftpd-2.3.5]# netstat -tlnp |grep 21
- tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 12589/vsftpd
- 测试成功
- 十、新建目录/backup/test,其属组为magedu,且此组具有读写权限,其它用户没有任何权限;magedu组成员在此目录中创建的文件的属组都需要是magedu,且magedu组中每个成员在此目录中只能删除自己的文件;
- mkdir /backup/test
- cd /backup
- chomd .magedu test
- chmod g=rw test
- chmod o=x
- chmod g+x test
- chmod o+t test
- 十一、配置当前主机内核参数,以允许在不同的网络接口间转发数据包;要求此项配置即刻生效并且在重新启动系统后不会失效。
- vim /etc/sysctl.conf
- net.ipv4.ip_forward = 1 /把0修改成1/
- sysctf -p 使其生效,不用重启系统
- 十二、配置本机每隔两天在凌晨3点20备份一次/etc目录,备份文件存放至/backup目录,文件名形如:etc-2012-06-20.tar.bz2;
- 20 03 */3 * * /bin/tar zcf /backup/etc-`date +\%F`.tar.gz /etc/* &> /dev/null
- 十三、使用find命令完成如下任务,每个问题使用一个命令:
- (1)找到/etc目录下属于root用户且至少7分钟没有访问过的普通文件,并将它们复制到/tmp/test目录;
- 要求:/tmp/test目录需要自己事先创建,并且为其创建符号链/users/test;
- (2)找到/users目录下所有没有属主且没有属组的文件,并将其属组修改为gentoo,将其属组修改为magedu;请删除一下www用户
- (1)mkdir /tmp/test
- ln -s /tmp/test /users/test
- find /etc -type f -user root -mmin +7 -exec cp {} /tmp/test/ \;
- (2)su - www
- touch aa /users/www
- exit
- userdel www
- find /users -nouser -nogroup -exec chown gentoo:magedu {} \;
- 十四题、为逻辑卷lv1创建快照卷lv1_snap,要求此卷只读,且大小为1G;而后通过此卷将数据备份至/backup目录归档压缩存放,备份文件名为users.tar.bz2;
- lvcreate -L 1G -n lv1_snap -s -p r /dev/myvg/lv1
- mkdir /mnt/lvm
- mount /dev/myvg/lv1_snap /mnt/lvm
- tar jcf /backup/users.tar.bz2 /mnt/lvm/*
- 十五题、为本机的eth0网卡配置第二个IP地址,地址为192.168.1.1XX,XX为你的座位号,要求系统重启后依然有效;而后为本机配置静态路由,当访问地址为10.0.0.0网络时,其网关为192.168.1.254,要求系统重启后依然有效;
- cd /etc/sysconfig/network-script/
- cp ifcfg-eth0 ifcfg-eth0:0
- vim ifcfg-eth0:0
- # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
- DEVICE=eth0
- BOOTPROTO=static
- HWADDR=00:0C:29:EB:5E:E0
- IPADDR=1192.168.1.22
- NETMASK=255.255.255.0
- ONBOOT=yes
- touch route-eth0
- vim route-eth0
- 10.0.0.0 via 192.168.1.254
- 最后重启网卡使其生效
- services network restart
- 使用ifconfig eth0:0查看ip地址
- 使用route -n 查看路由
- 十六题:为grub的编辑功能设置密码,密码以密文的格式存储,且密码为mageedu;
- 首先生成md5格式
- grub-md5-crypt 让你输入密码
- 然后编译vim /etc/grub.conf
- 放在title上面
- password --md5 $1$oFeqi0$jq7fLfMpoSW5fsEXLF0IB.
- 最后重启系统
- 十七题:
- 写一个脚本:
- 1) 使用函数实现:
- 判断一个用户是否存在,用户名通过参数传递而来;
- 如果存在,就显示此用户的shell和UID
- 如果不存在,就说此用户不存在;
- 2) 提示用户输入用户名,而后将其传递给上面的函数;
- 3) 判断结束后不退出,而是提示用户可继续输入其它用户名,或输入(quit)退出;
- #!/bin/bash
- #
- username () {
- if id $1 &> /dev/null;then
- echo "shell is `grep $1 /etc/passwd |cut -d: -f7` uid is `id $1`"
- return 0
- else
- echo "`id $1` is not exist"
- return 1
- fi
- }
- read -p "Please you input username:" choice
- until [ "$choice" = 'quit' ];do
- username $choice
- read -p "A newusers:" choice
- done
- 十八题:
- 写一个脚本:
- 1) 显示一个菜单给用户:
- d|D) show disk usages.
- m|M) show memory usages.
- s|S) show swap usages.
- q|Q) quit.
- 2) 当用户给定选项后显示相应的内容;
- 3) 每次执行完成后不退出脚本,而是提示用户可以继续查看其它信息;直到用户键入q、Q、quit或QUIT退出;
- 4) 如果用户给出的不是菜单中可用的选项,则告诉用户选项错误,需要重新选择
- menlist () { cat <<EOF
- d|D) show disk usages.
- m|M) show memory usages.
- s|S) show swap usages.
- q|Q) quit.
- EOF
- }
- menlist
- read -p "your caidan:" choice
- while true;do
- case $choice in
- d|D)
- df -hP
- ;;
- m|M)
- free -m
- ;;
- s|S)
- top -n1 |grep Swap
- ;;
- q|Q)
- exit
- ;;
- *)
- echo "your wrong"
- menlist
- ;;
- esac
- read -p "again:" choice
- done
- 十九题:
- 19、写一个脚本完成如下功能(请写好判断语句,使得此脚本可多次执行而不会出现未知错误):
- 1) 删除/dev/sdb磁盘上的所有分区;
- a) 先判断/dev/sdb磁盘设备是否存在;如果不存在,就退出脚本;
- b) 再判断此设备上是否有分区处于挂载使用状态,如果是,先强行卸载之;
- c) 在删除之前,请用户先确认;
- 2) 在/dev/sdb上创建3个分区:
- a) sdb1大小为50M;
- b) sdb2大小为200M;
- c) sdb3大小为64M; 此分区以后要做为交换分区使用;
- 注意:创建结束后要让系统重新读取此设备上的分区表;
- 3) 为上述的分区创建文件系统:
- a) sdb1为ext2;
- b) sdb2为ext3;
- c) sdb3为swap;
- 4) 挂载上述文件系统:
- a) sdb1挂载至/mnt/boot;
- b) sdb2挂载至/mnt/sysroot;
- 注意:挂载点须事先存在,否则,请在脚本中自行创建;
- #!/bin/bash
- #
- read -p "A disk:" DISK
- if ! fdisk -l /dev/sdb |grep "^Disk $DISK";then
- echo "$DISK is not exist" && exit 1
- fi
- read -p "Do you sure destory (y/n):" MOUNT
- case $MOUNT in
- y)
- echo "next"
- ;;
- n)
- exit
- ;;
- *)
- echo "wrong"
- ;;
- esac
- for i in `fdisk -l $DISK | grep -o "${DISK}[0-9]\{1,\}"`;do
- fuser -km $i
- umount $i
- done
- dd if=/dev/zero of=$DISK bs=512 count=1 &> /dev/null
- echo '
- n
- p
- 1
- +50M
- n
- p
- 1
- +50M
- n
- p
- 2
- +200M
- n
- p
- 3
- +64M
- t
- 3
- 82
- w' | fdisk $DISK &>/dev/null
- partprobe $DISK
- mke2fs -j ${DISK}1 &>/dev/null
- sleep 2
- mke2fs -j ${DISK}2 &>/dev/null
- mkswap ${DISK}3 &>/dev/null
- [ -d /mnt/boot ] || mkdir /mnt/boot
- [ -d /mnt/sysroot ] || mkdir /mnt/sysroot
- mount ${DISK}1 /mnt/boot
- mount ${DISK}2 /mnt/sysroot
- 二十题、写一个脚本:
- 为前面第9题的vsftpd服务提供一个SysV风格的服务脚本,将其放置于/etc/rc.d/init.d目录中,要求:
- 1) 能够使用chkconfig将其添加至服务列表;
- 2) 接受start|stop|restart|status等参数;
- #!/bin/bash
- #
- # vsftpd ftp-server
- # chkconfig: 2345 60 50
- # description: ftp server
- # config: /etc/vsftpd/vsftpd.conf
- start () {
- if [ ! -e /var/lock/subsys/vsftpd ];then
- /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf && touch /var/lock/subsys/vsftpd && return 0
- else
- echo "vsftpd starting already running" && return 1
- fi
- }
- stop () {
- [ -e /var/lock/subsys/vsftpd ] && killall vsftpd && rm -rf /var/lock/subsys/vsftpd
- }
- case $1 in
- start)
- start
- [ $? -eq 0 ] && echo -e "starting vsftpd: [\033[32mOK\033[0m]"
- ;;
- stop)
- stop
- if [ $? -eq 0 ];then
- echo -e "stop vsftpd: [\033[32mOK\033[0m]"
- else
- echo -e "stop vsftpd: [\033[31mFailure\033[0m]"
- fi
- ;;
- restart)
- stop [ $? -eq 0 ] && echo -e "stop vsftpd: [\033[32mOK\033[0m]"
- start [ $? -eq 0 ] && echo -e "starting vsftpd: [\033[32mOK\033[0m]"
- ;;
- *)
- echo "wrong `basename $0` [stop|start]"
- ;;
- esac