运维经典面试题合集¶
1. 如何查看HTTP的并发请求数与其TCP连接状态?¶
netstat -n | awk '/^tcp/ {++b[$NF]} END {for(a in b) print a,b[a]}'
Linux 服务器打开文件数也是影响并发的重要一环,具体可以查看该文件配置:/etc/security/limits.conf
当然同级目录下面的 limits.d 目录下的的配置文件也需要关注,也可以使用 ulimit -n 查看当前的配置数量。
2. 查看每个IP地址的连接数¶
netstat -n | awk '/^tcp/ {print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -rn
3. 通过tcpdump查看80端口访问量排前10¶
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -10
注意自己机器的 网卡名称
4. 统计access.log中访问量前10的IP¶
cat access.log | awk '{print $1}' | sort | uniq -c | sort -n -r | head -10
可以通过这个操作判断有些 非人为操作
5. 只查看/var/log 这一级目录下面的文件¶
find /var/log -maxdepth 1 -type f
简单的find命令考察,有意思的就是 -maxdepth 参数,如果不加默认会把该目录下的其它目录下的子文件也显示
这个在用于我们按照时间点删除某个目录下面的文件的时候特别有用
6. 生成32位的随机码¶
cat /dev/urandom | head -1 | md5sum | head -c 32
7. 如何查看二进制文件的内容?¶
一般通过 hexdump 命令查看,用法:hexdump -C 文件名,没怎么用过!
-C 是比较规范的 十六进制和ASCII码显示
-c 是单字节字符显示
-b 单字节八进制显示
-o 是双字节八进制显示
-d 是双字节十进制显示
-x 是双字节十六进制显示
显示样式:
9. 如何检测并修复 /dev/hda1?¶
fsck 命令
不应该用 fsck 检查已挂载的磁盘,这很可能会对磁盘造成永久性的伤害。因此在开始使用 fsck 之前,我们需要使用命令来卸载磁盘
umount /dev/hda1
#检查文件系统错误并自动修复
fsck -a /dev/hda1
10. Linux 系统的开机启动顺序:¶
加载 BIOS –> 读取 MBR –> Boot Loader –> 加载内核 –> 用户层 init (根据 inittab 设定系统运行的等级:一般 3 或 5)–> init 进程执行 rc.syninit –> 启动内核模块 –> 执行不同级别运行的脚本程序 –> 执行 /etc/rc.d/rc.local –> 执行 /bin/login
11. 软连接和硬链接的区别:¶
软连接(符号链接),类似 windows 系统里的快捷方式 硬链接,类似复制了一份,但是会跟着文件的改变而改变,但是不会因为删除而影响另一个
#软链接
ln -s 123.txt 456.txt #可以理解给给123.txt创建了一个快捷方式456.txt
#硬连接
ln 123.txt 456.txt
12. FTP 的主动模式和被动模式:¶
FTP 有两种工作方式:PORT 方式和 PASV 方式
PORT(主动):
- 客户端向服务端的 FTP 端口(默认是 21)发送连接请求
- 服务端接受连接,建立一条命令链路
- 传送数据时,客户端在命令链路上用 PORT 命令告诉服务端自己打开的随机端口
- 服务端从 20 端口向收到的客户端的随机端口发送连接请求,建立一条数据链路来传送数据
PASV(被动):
- 客户端向服务端的 FTP 端口(默认是21)发送连接请求,服务器接受连接
- 建立一条命令链路,当传送数据时,服务端通过命令链路自己打开随机端口
- 客户端向服务端的随机端口发送连接请求,建立一条数据链路来传送数据
13. 显示 /etc/inittab 中以 # 开头,且后面跟了一个或者多个空白字符,而后又跟了任意非空字符的行¶
grep "^\#[[:space:]]\{1,\}.\{1,\}" /etc/inittab
说明:这个一般用于剔除注释内容
14. 显示 /tmp/1.txt 中包含了 :一个数字: 的行¶
grep "^\([0-9]\).*\1$" /tmp/1.txt
15. 批量添加 10 个用户,用户名为 user01 - user10,密码为 user 后面跟 5 个随机字符¶
#!/bin/bash
#1 是产生 0 -10 的数并按照格式输出,2 是产生密码随机数并截取,3 是命令行添加密码
for i in `seq -f "%02g" 1 10`;do
useradd user$i
echo "user$i`echo $RANDOM|md5sum|cut -c 1-5`" | passwd --stdin user$i >/dev/null 2>&1
done
16. 判断 192.168.1.0/24 网络里,当前在线的 IP 有哪些,能 ping 通则认为在线¶
#!/bin/bash
for ip in `seq 1 255`;do
ping -c 3 192.168.1.$ip > /dev/null 2>&1
if [ $? -eq 0 ];then
echo "192.168.1.$ip UP"
else
echo "192.168.1.$ip DOWN"
fi
done
- 删除一个目录下的所有文件,但保留一个指定文件
假设这个目录是/xx/,里面有file1,file2,file3..file10 十个文件
[root@oldboy xx]# touch file{1..10}
[root@oldboy xx]# ls
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
#方法一:find
[root@oldboy xx]# find /xx -type f ! -name "file10"|xargs rm -f
[root@oldboy xx]# ls
file10
[root@oldboy xx]# find /xx -type f ! -name "file10" -exec rm -f {} \;
[root@oldboy xx]# ls
file10
这两种一个通过xargs传参,一个通过find的-exec执行命令参数来完成,都算作find吧
#方法二:rsync
[root@oldboy xx]# ls
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
[root@oldboy xx]# rsync -az --delete --exclude "file10" /null/ /xx/
[root@oldboy xx]# ls
file10
#方法四
find ./ -type f|grep -v "\file10\b"|xargs rm -f
#方法五
rm -f `ls|grep -v "\file10\b"`
从运维角度,任何删除性的操作都应该事先备份后在执行或者确认有备份存在。