> IT面试 >

2013最新linux运维面试题

一、有文件file1

1、查询file1 里面空行的所在行号

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‘ file1

head -3 file1

二、如何将本地80 端口的请求转发到8080 端口,当前主机IP 为192.168.2.1

Iptables -A PREROUTING -d 192.168.2.1 -p tcp -m tcp –dport 80 -j DNAT

–to-destination 192.168.2.1:8080

三、crontab

在11 月份内,每天的早上6 点到12 点中,每隔2 小时执行一次/usr/bin/httpd.sh 怎么 实现

0 6-12/2 * 11 * /usr/bin/httpd.sh

四、编写个shell 脚本将/usr/local/test 目录下大于100K 的文件转移到/tmp 目录下 #!/bin/bash

for file in `ls /root`

do

if [ -f $file ]; then

if [ `ls -l $file|awk '{print $5}'` -gt 10000 ]; then

mv $file /tmp/

fi

fi

done

五、简述raid0 raid1 raid5 三种工作模式的工作原理及特点。

RAID 0:连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据 传输率,但它没有数据冗余,因此并不能算是真正的RAID 结构。RAID 0 只是单纯地提高 性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据。因此, RAID 0 不能应用于数据安全性要求高的场合。

RAID 1:它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。 当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1 可以提高读取性能。RAID 1 是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时, 系统可以自动切换到镜像磁盘上读写 ,而不需要重组失效的数据。简单来说就是:镜象结 构,类似于备份模式,一个数据被复制到两块硬盘上。

RAID10:高可靠性与高效磁盘结构

一个带区结构加一个镜象结构,因为两种结构各有优缺点,因此可以相互补充。 主要用于容量不大,但要求速度和差错控制的数据库中。

RAID5:分布式奇偶校验的独立磁盘结构,它的奇偶校验码存在于所有磁盘上,任何一个 硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据。支持一块盘掉线后仍然正常运行。

六、oracle 数据库备份方式

物理备份:开启网络监听,备份数据库文件。

RMAN 备份:通过表空间文件在RMAN 模式对ORACLE 数据备份。

七、如何查看占用端口8080 的进程

lsof -i:8080

八、请写出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 的模式下。

九、你使用过监控软件吗?说说其特点

使用nagios 对服务器进行监控,其特点可实时实现手机短信、电子邮件、MSN、飞信报警。 使用cacti 对流量进行监控。

十、你对现在运维工程师的理解和以及对其工作的认识

运维工程师在公司当中责任重大,需要保证时刻为公司及客户提供最高、最快、最稳定、最 安全的服务。运维工程师的一个小小的失误,很有可能会对公司及客户造成重大损失,因此 运维工程师的工作需要严谨及富有创新精神。

十一、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 的配置,到相应的配置文件进行查询,将结果返回给请求 的客户端。

十二、通过apache 访问日志access.log 统计IP 和每个地址访问的次数,按访问量列出前10 名。

日志格式样例如下

192.168.1.247 – - [02/Jul/2010:23:44:59 +0800] ―GET / HTTP/1.1″ 200 19

答案:

cat access_log | awk ‗{print $1}‘ | uniq -c|sort -rn|head -10

//这个别的方法也能统计,但有些命令是必要的 awk , sort,uniq ,主要看是否这些命令都 使用了。

十三、如何用mysql 命令进行备份和恢复?以test 库为例,创建一个备份,并再用此备份 进行恢复。

mysqldump -u root -p test > test.sql

mysql -u root -p test < test.sql

//主要考对方msqldump > test.sql 和 mysql < test.sql

十四、你认为在系统调优方面都包括哪些工作,以linux 为例,请简明阐述,并举一些参数 为例。

答案:

系统调优包括内核参数优化和应用优化2 个方面,对方只要从这两方面来说,就可以了, 尽量能有些经验的阐述。

有个文件如下:

http://a.domain.com/1.html

http://b.domain.com/1.html

http://c.domain.com/1.html

http://a.domain.com/2.html

http://b.domain.com/2.html

http://a.domain.com/3.html

要求:得到主机名(和域名),并统计哪个网址出现的次数,并排序。可以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

挂载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

A B 网络是通的,最少列出五种传输文件的服务

nfs ,ftp,scp ,rsync,samba,http://

1.假设Apache 产生的日志文件名为access_log,在apache 正在运行时,执行命令mv
 

access_log access_log.bak,执行完后,请问新的apache 的日志会打印到哪里,为什么? 新的日志会打印在access_log.bak 中,因为apache 启动时会找到access_log 文件, 随时准备向文件中加入日志信息,

虽然此时文件被改名,但是由于服务正在运行,因为它的inode 节点的位置没有变,程序 打开的fd 仍然会指向原来那个inode,

不会因为文件名的改变而改变。apache 会继续向已改名的文件中追加日志,但是若重启 apache 服务,系统会检查access_log

文件是否存在,若不存在则创建。

2.在Shell 环境下,如何查看远程Linux 系统运行了多少时间?

2、监控主机执行: ssh user@被监控主机ip "uptime"

这样得到了被监控主机的uptime

3.处理以下文件内容,将域名取出并进行计数排序,如处理:

http://www.baidu.com/index.html

http://www.baidu.com/1.html

http://post.baidu.com/index.html

http://mp3.baidu.com/index.html

http://www.baidu.com/3.html

http://post.baidu.com/2.html

得到如下结果:

域名的出现的次数 域名

3 www.baidu.com

2 post.baidu.com

1 mp3.baidu.com

可以使用bash/perl/php/c 任意一种

3、[root@localhost shell]# cat file | sed -e ' s/http:\/\///' -e ' s/\/.*//' | sort |

uniq -c | sort -rn

3 www.baidu.com

2 post.baidu.com

1 mp3.baidu.com

[root@codfei4 shell]# awk -F/ '{print $3}' file |sort -r|uniq -c|awk '{print

$1"\t",$2}'

3 www.baidu.com

2 post.baidu.com

1 mp3.baidu.com

4.如果得到随机的字串,长度和字串中出现的字符表可定义,并将字串倒序显示,如

把0123456789 作为基准的字串字符表,产生一个6 位的字串642031,打印出的字串为 130246,可使用bash/perl/php/c 任意一种.

4、[root@localhost ~]# awk -v count=6 'BEGIN

{srand();str="0123456789";len=length(str);for(i=count;i>0;i--)

marry[i]=substr(str,int(rand()*len),1);for(i=count;i>0;i--)

printf("%c",marry[i]);printf("\n");for

(i=0;i<=count;i++) printf("%c",marry[i]);printf("\n")}'

838705

507838

 

5.如何查看当前Linux 系统的状态,如CPU 使用,内存使用,负载情况等.

5、Linux 系统中―/proc‖是个伪文件目录,不占用系统空间,及时的反应出内存现在使用的 进程情况......其中许多文件都保存系统运行状态和相关信息

对于―/proc‖中文件可使用文件查看命令浏览其内容,文件中包含系统特定信息: cpuinfo 主机CPU 信息

filesystems 文件系统信息

meninfo 主机内存信息

version Linux 内存版本信息

diskstatus 磁盘负载情况

另外top 命令可以动态的显示当前系统进程用户的使用情况,而且是动态的显示出来,尤其 是在该命令显示出来的对上方对系统的情况进行汇总.

free 命令呢可以查看真实使用的内存 一般用free -m

使用lsof 、ps -aux 可以查看详细的每个进程的使用状况

dmesg 也是常用来查看系统性能的命令

#题目:有10 台被监控主机、一台监控机,在监控机上编写脚本,一旦某台被监控机器/ 分区适用率大于80%, 就发邮件报警放到crontab 里面, 每10 分钟检查一次 #测试机器:虚拟机Linux as 4

#1.首先建立服务器间的信任关系。拿两台机器做测试

本机ip:192.168.1.6

[root@codfei ~]# ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

/root/.ssh/id_rsa already exists.

Overwrite (y/n)? y (以为我是第2 次建立关系所以此处覆盖原来的文件)

Enter passphrase (empty for no passphrase):(直接回车无须输入密钥)

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

04:37:13:2a:4b:10:af:c1:2b:03:3f:6b:27:ce:b9:62 root@codfei

[root@codfei ~]# cd .ssh/

[root@codfei .ssh]# ll

-rw------- 1 root root 883 Apr 25 17:51 id_rsa

-rw-r--r-- 1 root root 221 Apr 25 17:51 id_rsa.pub

-rw-r--r-- 1 root root 442 Apr 25 17:37 known_hosts

id_rsa 是密钥文件,id_rsa.pub 是公钥文件。

[root@codfei .ssh]# scp id_rsa.pub192.168.1.4:/root/.ssh/192.168.1.6

root@192.168.1.4's password:

id_rsa.pub 100% 221 0.2KB/s 00:00

这里把公钥文件取名为本机的ip 地址就是为了以后和更多的机器建立信任关系不发生混 淆。

现在登陆到192.168.1.4 机器

[root@codfei ~]# cd .ssh/

[root@codfei .ssh]# cat 192.168.1.6 >> authorized_keys
 

然后回到192.168.1.6 机器直接

[root@codfei .ssh]# ssh 192.168.1.4

Last login: Wed Aug 8 12:14:42 2007 from 192.168.1.6

这样就可以了,里面偶尔涉及到权限问题。一般./ssh 文件夹是755 authorized_keys 为 600 或者644

####脚本如下#######################

#!/bin/bash

#SCRIPT:df_check.sh

#Writeen by codfei Mon Sep 3 07:25:28 CST 2007

#PURPOSE:This script is used to monitor for full filesystems.

#######################Begining####################

####################

FSMAX="80"

remote_user='root' #####完全可以不用root

remote_ip=(192.168.1.5 192.168.1.6 192.168.1.7 192.168.1.8 192.168.1.9

192.168.1.10 192.168.1.11 192.168.1.12 192.168.1.13 192.168.1.14 ) ---->

这里填写你要监控的主机ip

ip_num='0'

while [ "$ip_num" -le "$(expr ${#remote_ip[@]} - 1)" ]

do

read_num='1'

ssh "$remote_user"@"${remote_ip[$ip_num]}" df -h > /tmp/diskcheck_tmp

grep '^/dev/*' /tmp/diskcheck_tmp|awk '{print $5}'|sed 's/\%//g' >

/tmp/diskcheck_num_tmp

while [ "$read_num" -le $(wc -l < /tmp/diskcheck_num_tmp) ]

do

size=$(sed -n "$read_num"'p' /tmp/diskcheck_num_tmp)

if [ "$size" -gt "$FSMAX" ]

then

$(grep '^/dev/*' /tmp/diskcheck_tmp|sed -n $read_num'p' >

/tmp/disk_check_mail)

$(echo ${remote_ip[$ip_num]} >> /tmp/disk_check_mail)

$(mail -s "diskcheck_alert" admin < /tmp/disk_check_mail)

fi

read_num=$(expr $read_num + 1)

done

ip_num=$(expr $ip_num + 1)

done

#############over################################

################让脚本每十分钟执行一次#############

在cron 表中加入

0/10 * * * * /home/codfei/diskcheck.sh 2>&1

################################################

##########################
 

比如, ext2 文件系统, 如果异常死机,开机如何修复文件系统?

如果异常关机,比如断电,通知机房的人开机之后,

我们需要远程修复、检查文件系统

除了/分区之外, 其他的分区:

umount /home

fsck -y /home

/ 分区需要开机之后, 由机房的人来扫描

随后我们再登录并扫描/home 等其他分区

如何查看一个进程所使用的文件句柄?

看这里面 /proc/进程号/fd/

的个数就行了

简单的比如如何查看apache 进程数

[root@localhost fd]# ps -ef|grep httpd|wc -l

1

如何统计apache 的每秒访问数?

tail access_log | awk '{print $1,$4}'

[root@localhost logs]# grep -c `date -d '3 second ago' +%T` access_log

 

################################################

1、/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

(责任编辑:IT)