百度面试题

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系统运行了多少时间?
二、监控主机执行: 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任意一种
三、[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.comphp

4.若是获得随机的字串,长度和字串中出现的字符表可定义,并将字串倒序显示,如
把0123456789做为基准的字串字符表,产生一个 6位的字串642031,打印出的字串为
130246,可以使用bash/perl/php/c任意一种.
四、[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");forhtml

(i=0;i<=count;i++) printf("%c",marry[i]);printf("/n")}'
838705
507838
5. 如何查看当前Linux系统的状态,如CPU使用,内存使用,负载状况等.
五、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或者644node


####脚本以下#######################linux

#!/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>&1shell

 

##########################################################################
比 如, 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
0
#######################################################################################################################
#######################################################################################################################
一、 /proc/sys 子目录的做用
该子目录的做用是报告各类不一样的内核参数,并让您能交互地更改其中的某些。与 /proc 中全部其余文件不一样,该目录中的某些文件能够写入,不过这仅针对 root。apache

其中的目录以及文件的详细列表将占据过多的篇幅,并且该目录的内容是依赖于系统的,而大部分的文件也仅仅对某些特殊的应用程序有用。然而,如下是该 子目录的两个最多见的用途:bash

容许路由:即使是 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
二、将一个文本的奇数行和偶数行合并,第2行和第3行合并
[root@localhost bin]# cat 1
48      Oct     3bc1997 lpas    68.00   lvx2a   138
484     Jan     380sdf1 usp     78.00   deiv    344
483     nov     7pl1998 usp     37.00   kvm9d   644
320     aug     der9393 psh     83.00   wiel    293
231     jul     sdf9dsf sdfs    99.00   werl    223
230     nov     19dfd9d abd     87.00   sdiv    230
219     sept    5ap1996 usp     65.00   lvx2c   189
216     Sept    3zl1998 usp     86.00   kvm9e   234
[root@localhost bin]# sed '$!N;s//n/  /g' 1
48      Oct     3bc1997 lpas    68.00   lvx2a   138  484     Jan     380sdf1 usp     78.00   deiv    344
483     nov     7pl1998 usp     37.00   kvm9d   644  320     aug     der9393 psh     83.00   wiel    293
231     jul     sdf9dsf sdfs    99.00   werl    223  230     nov     19dfd9d abd     87.00   sdiv    230
219     sept    5ap1996 usp     65.00   lvx2c   189  216     Sept    3zl1998 usp     86.00   kvm9e   234
[root@localhost bin]# sed -n -e 2p -e 3p 1|sed '$!N;s//n/ /'
484     Jan     380sdf1 usp     78.00   deiv    344 483     nov     7pl1998 usp     37.00   kvm9d   644
三、read 命令5秒后自动退出
[root@localhost bin]# read -t 5
四、 自动ftp上传
#!/bin/sh
ftp -n<<END_FTP
open 192.168.1.4
user codfei duibuqi   //用户名codfei 密码duibuqi
binary
prompt off    //关闭提示
mput test    //上传test
close
bye
END_FTP
   自动ssh登录 从A到B而后再到c
#!/usr/bin/expect -f
set timeout 30
spawn ssh codfei@B
expect "password:"
send "pppppp/r"
expect "]*"
send "ssh codfei@C/r "
expect "password:"
send "pppppp/r"
interact

五、#打印第一个域
[root@localhost bin]# cat 3
eqeqedadasdD
eqeqdadfdfDD
fdsfdsfQWEDD
DSADASDSADSA
[root@localhost bin]#
[root@localhost bin]#
[root@localhost bin]# awk -F "" '{print $1}' 3
e
e
f
D
六、实现字符串翻转
[root@localhost bin]# cat 8
qweqewqedadaddas
[root@localhost bin]# rev 8
saddadadeqweqewq
######################################## 第2次电面
七、sed awk grep哪一个最好
我答的是 哪一个掌握的精通,都很好,可是仍是问我哪一个最好,我只能说awk了,对于行操做和列操做均可以操做的很好。
八、grep -E -P 是什么意思
我 说的是-E, --extended-regexp 采用规则表示式去解释样式。 -P不太清楚
九、还问了我对运维这个工做的理解,和应该具有的 素质。
…………

后记:百度面试的这些日子,很刻苦的学习了一个阶段。脚本编写能力有了很大的提升。可是仍是很遗憾,没有去到那。打算在大连找个运维的工 做,继续个人理想。工做几年以后,我还会继续努力的。 3年前,我是个连电脑开机关机都不会的农村孩子,如今我感受本身已经对于Linux入门了, 我颇有成就感,可是我仍是被百度通知,我没有发展潜力。我是东软的学生,我老是认为计算机这个行业不看 出身,只要有实力就能够了。可是第一次电面 我没有被提早通知会电面,忽然打来的电话,当时正在睡觉,头脑一片空白……进入到第2次面试的时候,没有慌张准备的很充分,可是仍是没有最终被录取。 面 试的考官问我,你最失落的事是什么,我说我最失落的事是我高考前意外受伤休学了,我如今才意识到,我当时应该回答他,我最失落的时刻应该是我得知被百度拒 绝的那一刻。 已经付出了努力,即便失败也很坦然。