8-3 h512.Linux进程有几个状态,简述各状态的转换条件。
答案:
1.运行状态 2. 可中断睡眠状态 3.不可中断睡眠状态 4.暂停状态 5.跟踪状态 6.僵死状态 7.退出状态 (7分)
(1)进程创建时的状态为不可中断睡眠状态,在do_fork()结束前被父进程唤醒后,变为执行状态,适当时候获得CPU。
(2)获得CPU且正在运行的进程若申请不到某个资源时,进入睡眠状态,如果调用sleep_on(),则其状态变为不可中断睡眠状态,如果调用interruptible_sleep_on(),则其状态变为可中断睡眠状态,当进程获取所申请的资源时,睡眠进程进入运行状态。
(3)当系统调用do_exit()时,进程进入僵死状态。若进程通过系统调用设置标志PF_SYSTRACE,则在系统调用返回前进入函数syscall_trace(),状态改为暂停。只有通过其他进程发送的信号SIG_KILL或SIG_CONT,才能把暂停状态进程唤醒,重新进入run-queue队列。
答:
进程通常至少有三种基本状态:
(1)就绪状态(ready):进程运行所需的外部条件满足,但因为其它进程已占用CPU,所以暂时不能运行。
(2)执行状态(running):外部条件满足,进程已获得CPU,其程序正在执行。在单处理机系统中,只有一个进程处于执行状态。
(3)阻塞状态(blocked):进程因资源无法满足而等待资源,暂时不能运行的状态,称为阻塞状态,也称为等待状态。
各状态的转换条件:
(1)就绪 à 执行:对于处于就绪状态的进程,在调度程序为之分配了处理机之后,该进程便可执行。相应地,它由就绪状态转变为执行状态。
(2)执行 à就绪:正在执行的进程(执行状态)也称为当前进程,如果因分配给它的时间片已用完而被暂停执行时,该进程便由执行状态又回到就绪状态;
(3)执行 à阻塞:一个处在执行状态的进程,如果因等待资源而使进程的执行受阻,使之无法继续执行,该进程将由执行状态转变为阻塞状态。
(4)阻塞 à 就绪:一个处于阻塞状态的进程,当它所需的外部事件满足,它应由阻塞状态变为就绪状态。
Linux系统的一个任务总体上有以下几种状态:
(1)TASK-RUNNING状态 :执行和就绪两种状态
(2)TASK-INTERRUPTIBLE状态:可中断的等待状态。
(3)TASK-UNINTERRUPTIBLE状态:不可中断等待状态。
(4)TASK-ZOMBIE状态,僵死状态。由于某些原因进程被终止,这个进程所占有的资源全部释放之后,还保存着PCB信息,这种占有PCB但已被撤消的进程就处于僵死状态。
(5)TASK-STOPPED状态,暂停状态。
8-4 h513.Linux中的线程调度算法有几种,简述之?
调度策略有三种:
(1)SCHED_OTHER(普通分时调度策略):它是缺省调度策略,适用于优先级为0的线程,它为链表中的每个线程分配时间片,保证链表中的每个线程有公平的执行时间。
(2)SCHED_FIFO(先进先出调度策略):适用于优先级高于0的线程,当SCHED_FIFO中有可运行线程时,该线程会抢先任何当前运行的SCHED_OTHER线程称为当前运行线程。当有优先级更高的线程抢先时,该进程保留在对应链表的头部,在高优先级线程结束后立即投入运行。
(3)SCHED_RR(循环调度策略):它是SCHED_FIFO策略的简单增强,增加了时间片限制。如果某个SCHED_RR 运行的线程等于或超过分配给它时间片,结束运行,排到对应链表的尾部。
8-5 h16.试解释apache 服务器以下配置的含义:
16.试解释apache 服务器以下配置的含义:
(1)port 1080 (2)UserDir userdoc
(3)DocumentRoot ―/home/htdocs‖
(4);
Options Indexes FollowSymLinks
AllowOverride Non
Order deny,allow
deny from all
allow from 192.168.1.5;
(5)Server Type Standlone
Apache 服务器配置行含义如下:
(1)将apache 服务器的端口号设定为1080;
(2)设定用户网页目录为userdoc;
(3)设定apache 服务器的网页根目录:/home/htdocs;
(4)在此apache 服务器上设定一个目录/home/htdocs/inside,且此目录只允许IP 地
址为192.168.1.5 的主机访问;
(5)定义apache 服务器以独立进程的方式运行。
8-6 h17.简述使用ftp 进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp 文件传输命令是什么?
(1)ftp 有两种登录方式:匿名登录和授权登录。使用匿名登录时,用户名为:anonymous,密码为:任何合法email 地址;使用授权登录时,用户名为用户在远程系统中的用户帐号,密码为用户在远程系统中的用户密码。
区别:使用匿名登录只能访问ftp 目录下的资源,默认配置下只能下载;而授权登录访问的权限大于匿名登录,且上载、下载均可。
(2)ftp 文件传输有两种文件传输模式:ASCII 模式和binary 模式。ASCII 模式用来传输文本文件,其他文件的传输使用binary模式。
(3)常用的ftp 文件传输命令为:bin、asc、put、get、mput、mget、prompt、bye
8-7 h18. 将内网 192.168.0.0/24 的原地址修改为 公网IP地址:1.1.1.1
[root@xuegod63 ~]# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1
[root@xuegod63 ~]# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.0.1
8-8 h19.简述raid0 raid1 raid5 三种工作模式的工作原理及特点。
RAID 0:连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率,但它没有数据冗余,因此并不能算是真正的RAID 结构。RAID 0 只是单纯地提高性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0 不能应用于数据安全性要求高的场合。
RAID 1:它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1 可以提高读取性能。RAID1 是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写 ,而不需要重组失效的数据。简单来说就是:镜象结构,类似于备份模式,一个数据被复制到两块硬盘上。
8-9 h20.如何查看占用端口8080 的进程
8-10请写出apache2.X 版本的两种工作模式,以及各自工作原理。如何查看apache 当前所支持的模块,并且查看是工作在哪种模式下?
prefork(多进程,每个进程产生子进程)和worker(多线程,每个进程生成多个线程)
prefork 的工作原理是,控制进程在最初建立―StartServers 个子进程后,为了满足MinSpareServers 设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32 个,直到满足MinSpareServers 设置的值为止。这就是预派生(prefork)的由来。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。
worker 是2.0 版中全新的支持多线程和多进程混合模型的MPM。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是,worker 也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。这种MPM 的工作方式将是Apache 2.0 的发展趋势。
可以通过命令httpd -l 可以查看apache 当前的模块,如果带有worker.c 就是工作在worker 模式下,如果有prefork.c 就是工作在prefork.c 的模式下。
8-11 h22.你使用过监控软件吗?说说其特点
使用nagios 对服务器进行监控,其特点可实时实现手机短信、电子邮件、MSN、飞信报警。
使用cacti 对流量进行监控。
8-12 h23.你对现在运维工程师的理解和以及对其工作的认识
运维工程师在公司当中责任重大,需要保证时刻为公司及客户提供最高、最快、最稳定、最安全的服务.运维工程师的一个小小的失误,很有可能会对公司及客户造成重大损失,因此运维工程师的工作需要严谨及富有创新精神。
8-13 linux 下常用的DNS服务软件是什么,举出几种常用的DNS记录,如果域名abc.com配置好了一台邮件服务器,IP 地址为202.106.0.20,我该如何做相关的解析?是否了解bind 的智能解析,如果了解请简述一下其原理
1)常用的DNS 软件是bind
2)A 记录 地址记录
MX 记录 邮件交换记录
CNAME 记录 别名域记录
3)修改abc.com 域名的配置文件,增加以下记录
IN MX 10 mail.abc.com.
mail IN A 202.106.0.20
4)bind 根据请求解析客户端的IP 地址,做出不同的解析,其原理是在配置文件中,设定了view,在每个view 都有客户端的IP 地址段,bind 服务器根据请求解析客户端的IP 地址,匹配不同的view,再根据该view 的配置,到相应的配置文件进行查询,将结果返回给请求的客户端。
8-14 通过apache 访问日志access.log 统计IP 和每个地址访问的次数,按访问量列出前10 名。日志格式样例如下192.168.1.247 – - [02/Jul/2010:23:44:59 +0800] ―GET / HTTP/1.1″ 200 19
[root@xuegod63 ~]# service httpd restar
[root@xuegod63 ~]# curl http://192.168.1.63 #自己产生一些日志
[root@xuegod63 ~]# cat /var/log/httpd/access_log | awk '{ print $1 }' | uniq -c|sort -rn|head -10
//这个别的方法也能统计,但有些命令是必要的 awk , sort,uniq ,主要看是否这些命令都使用了。
8-15 h26.如何用MySQL 命令进行备份和恢复?以test 库为例,创建一个备份,并再用此备份进行恢复。
[root@xuegod63 ~]# yum install -y mysql-server
[root@xuegod63 ~]# service mysqld start
[root@xuegod63 ~]# mysqldump -u root -p test > test.sql
//主要考对方msqldump > test.sql 和 mysql < test.sql
8-16 h1.用Shell 编程,判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下。
#!/bin/bash
directory=/dev
for file in anaconda-ks.cfg install.log install.log.syslog
do
if [ -f $file ]
then
cp $file $directory/$file.bak
echo " HI, $LOGNAME $file is backed up already in $directory !!"
fi
done
8-17 h27.你认为在系统调优方面都包括哪些工作,以linux 为例,请简明阐述,并举一些参数为例。
系统调优包括内核参数优化和应用优化2 个方面,对方只要从这两方面来说,就可以了,尽量能有些经验的阐述。
8-18 h28.挂载windows 的共享目录?
mount.cifs //IP/SHARE linux 的目录 --verbose -o user=username <--这个用户是windows 下的用户--verbose 这个参数可以不加,它是显示过程的
例如mount.cifs //10.1.1.246/gongxiang /mnt --verbose -o user=gao
或者是mount -t cifs
umount /mnt 或umount.cifs /mnt -l <--取消挂载
图形界面:smb://IP
8-19 h29.A B 网络是通的,最少列出五种传输文件的服务
nfs ,ftp,scp ,rsync,samba,http://
8-20假设Apache 产生的日志文件名为access_log,在apache 正在运行时,执行命令mv
access_log access_log.bak,执行完后,请问新的apache 的日志会打印到哪里,为什么?
新的日志会打印在access_log.bak 中,因为apache 启动时会找到access_log 文件,随时准备向文件中加入日志信息,虽然此时文件被改名,但是由于服务正在运行,因为它的inode 节点的位置没有变,程序打开的fd 仍然会指向原来那个inode,不会因为文件名的改变而改变。apache 会继续向已改名的文件中追加日志,但是若重启apache 服务,系统会检查access_log文件是否存在,若不存在则创建。
8-21如何查看当前Linux 系统的状态,如CPU 使用,内存使用,负载情况等.Linux 系统中―/proc‖是个伪文件目录,不占用系统空间,及时的反应出内存现在使用的进程情况......其中许多文件都保存系统运行状态和相关信息对于―/proc‖中文件可使用文件查看命令浏览其内容,文件中包含系统特定信息:
cpuinfo 主机CPU 信息
filesystems 文件系统信息
meninfo 主机内存信息
version Linux 内存版本信息
diskstatus 磁盘负载情况
另外top 命令可以动态的显示当前系统进程用户的使用情况,而且是动态的显示出来,尤其是在该命令显示出来的对上方对系统的情况进行汇总.
free 命令呢可以查看真实使用的内存 一般用free -m
使用lsof 、ps -aux 可以查看详细的每个进程的使用状况
dmesg 也是常用来查看系统性能的命令
8-22请将下列shell 程序加注释,并说明程序的功能和调用方法:#!/bin/sh
#!/bin/sh
/etc/rc.d/rc.httpd
Start/stop/restart the Apache web server.
To make Apache start automatically at boot, make this
file executable: chmod 755 /etc/rc.d/rc.httpd
case "$1" i
'start')
/usr/sbin/apachectl start ;;
'stop')
/usr/sbin/apachectl stop ;;
'restart')
/usr/sbin/apachectl restart ;;
*)
echo "usage $0 start|stop|restart" ;
esac
(1)程序注释
#!/bin/sh 定义实用的shell
# /etc/rc.d/rc.httpd 注释行,凡是以星号开始的行均为注释行。
# Start/stop/restart the Apache web server.
# To make Apache start automatically at boot, make this
# file executable: chmod 755 /etc/rc.d/rc.httpd
#case "$1" in #case 结构开始,判断―位置参数‖决定执行的操作。本程序携带一个―位置参数‖,即$1
'start') #若位置参数为start
/usr/sbin/apachectl start ;; #启动httpd 进程
'stop') #若位置参数为stop
/usr/sbin/apachectl stop ;; #关闭httpd 进程
'restart') #若位置参数为stop
/usr/sbin/apachectl restart ;; #重新启动httpd 进程
*) #若位置参数不是start、stop 或restart 时
echo "usage $0 start|stop|restart" ;; #显示命令提示信息:程序的调用方法
esac #case 结构结束
(2)程序的功能是启动,停止或重新启动httpd 进程
(3)程序的调用方式有三种:启动,停止和重新启动。
8-23 比如, ext2 文件系统, 如果异常死机,开机如何修复文件系统?如果异常关机,比如断电,通知机房的人开机之后,我们需要远程修复、检查文件系统除了/分区之外, 其他的分区:
umount /home
fsck -y /home
/ 分区需要开机之后, 由机房的人来扫描随后我们再登录并扫描/home 等其他分区如何查看一个进程所使用的文件句柄?看这里面 /proc/进程号/fd/的个数就行了
8-24 简单的比如如何查看apache 进程数
[root@localhost fd]# ps -ef|grep httpd|wc -l
1
8-25 proc/sys 子目录的作用该子目录的作用是报告各种不同的内核参数,并让您能交互地更改其中的某些。与 /proc中所有其他文件不同,该目录中的某些文件可以写入,不过这仅针对 root。其中的目录以及文件的详细列表将占据过多的篇幅,而且该目录的内容是依赖于系统的,而大部分的文件也仅仅对某些特殊的应用程序有用。然而,以下是该子目录的两个最常见的用途:
允许路由:即便是 Mandrakelinux 默认的内核也是允许路由的,您必需显式允许它这么做。为此,您只要以 root 身份键入以下命令:$ echo 1 >/proc/sys/net/ipv4/ip_forward如果您要禁用路由,请将上述命令中的 1 改为 0。
阻止 IP 欺骗:IP 欺骗会让人认为某个来自于外部的某个数据包是来自于它到达的那个接口。这一技术常被骇客(cracker)所使用。您可以让内核阻止这种入侵。请键入:$ echo 1 >/proc/sys/net/ipv4/conf/all/rp_filter这样,这种攻击就不再可能了。这些改变仅当系统运行时有效。在系统重新启动之后,它们会改会它们的默认值。要在启动时就改动这些值,您可以将您在 shell 提示符后键入的命令添加到 /etc/rc.d/rc.local 中以免每次都键入它们。另一个方法是修改/etc/sysctl.conf
8-26 h0035.实现字符串翻转
[root@localhost bin]# cat 8
qweqewqedadaddas
[root@localhost bin]# rev 8
saddadadeqweqewq
8-27 h3.设计一个shell 程序,添加一个新组为class1,然后添加属于这个组的30 个用户,用户名的形式为stdxx,其中xx 从01到30。
#!/bin/sh
i=1
groupadd class1
while [ $i -le 30 ]
do
if [ $i -le 9 ] ;then
USERNAME=stu0${i}
else
USERNAME=stu${i}
fi
useradd $USERNAME
mkdir /home/$USERNAME
chown -R $USERNAME /home/$USERNAME
chgrp -R class1 /home/$USERNAME
i=$(($i+1))
done
8-28 h0036.sed awk grep 哪个最好
我答的是 哪个掌握的精通,都很好,但是还是问我哪个最好,我只能说awk 了,对于行操作和列操作都可以操作的很好。
8-29 h0037.grep -E -P 是什么意思
我说的是-E, --extended-regexp 采用规则表示式去解释样式。 -P 不太清楚
8-30 h0038.简述Apache 两种工作模式,以及它们之间的区别。
最主要的两种模式是prefork 模式与worker 模式。prefork 每个子进程只有一个线程,效率高但消耗内存大,是unix 下默认的模式;worker 模式每个子进程有多个线程,内存消耗低,但一个线程崩溃会牵连其它同子进程的线程。
8-31 h39.用iptables 添加一个规则允许192.168.0.123 访问本机3306 端口
iptables -I INPUT 1 -p tcp -m tcp --dport 3306 -s 192.168.0.123 -j ACCEPT
8-32 h4.编写shell 程序,实现自动删除50 个账号的功能。账号名为stud1 至stud50。
#!/bin/sh
i=1
while [ $i -le 50 ]
do
userdel -r stud${i}
i=$(($i+1 ))
done
8-33设计一个shell 程序,在每月第一天备份并压缩/etc 目录的所有内容,存放在/root/bak目录里,且文件名为如下形式yymmdd_etc,yy 为年,mm为月,dd 为日。Shell 程序fileback 存放在/usr/bin 目录下。
#!/bin/sh
DIRNAME=ls /root | grep bak
if [ -z "$DIRNAME" ] ; then
mkdir /root/bak
cd /root/bak
fi
YY=date +%y
MM=date +%m
DD=date +%d
BACKETC=$YY$MM$DD_etc.tar.gz
tar zcvf $BACKETC /etc
echo "fileback finished!"
(2)编写任务定时器:
echo "0 0 1 * * /bin/sh /usr/bin/fileback" >; /root/etcbakcron
crontab /root/etcbakcron
或使用crontab -e 命令添加定时任务:
0 1 * * * /bin/sh /usr/bin/fileback
8-34 h7.有一普通用户想在每周日凌晨零点零分定期备份/user/backup 到/tmp 目录下,该用户应如何做?
(1)第一种方法:
用户应使用crontab –e 命令创建crontab 文件。格式如下:
0 0 * * sun cp –r /user/backup /tmp
(2)第二种方法:
用户先在自己目录下新建文件file,文件内容如下:
0 * * sun cp –r /user/backup /tmp
然后执行 crontab file 使生效。
8-35设计一个Shell 程序,在/userdata 目录下建立50 个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。
#!/bin/sh
i=1
while [ i -le 50 ]
do
if [ -d /userdata ];then
mkdir -p -m 754 /userdata/user$i 加上-m 754 就不用写下面那一句了 -p 是递归建
立目录
#chmod 754 /userdata/user$i
echo "user$i"
let "i = i + 1" (或i=$(($i+1))
else
mkdir /userdata
mkdir -p -m /userdata/user$i
#chmod 754 /userdata/user$i
echo "user$i"
let "i = i + 1" (或i=$(($i+1))
fi
done
8-36有文件file
[root@xuegod63 ~]# cat file #file中内容如下:
aaaaaa
bbbbbbbb
cccccccab
(1)查询file里面空行的所在行号;
(2)查询file1 以abc 结尾的行;
(3)打印出file1 文件第1 到第3 行。
(1)查询file里面空行的所在行号:
awk '{if($0~/^$/)print NR}' file
or
grep -n ^$ file |awk 'BEGIN{FS=":"}{print $1}'
(2)查询file1 以abc 结尾的行:
grep abc$ file1
(3)打印出file1 文件第1 到第3 行:
sed -n '1,3p' file
head -3 file
8-37 h10.编写个shell 脚本将/boot/grub/目录下大于100K 的文件转移到/opt 目录下
[root@xuegod63 ~]# cat test.sh
#!/bin/bash
cd /boot/grub
for file in ls /boot/grub
#for file in ls /boot/grub
do
if [ -f $file ]; then
if [ ls -l $file|awk '{print $5}' -gt 10000 ]; then
mv $file /opt/
fi
fi
done
8-38 h11.有个文件如下:
要求:得到主机名(和域名),并统计哪个网址出现的次数,并排序。可以shell 或C。
得到的结果应该是:
3 a.domain.com
2 b.domain.com
1 c.domain.com
[root@mail ~]# awk ‗BEGIN{FS=‖/‖}{arr[$3]++}END{for(i in arr) print
arr[i],i}‘ list| sort -r
3 a.domain.com
2 b.domain.com
1 c.domain.com