过往的一些笔试题面试题
By FreelyTomorrow profile image FreelyTomorrow
9 min read

过往的一些笔试题面试题

运维的笔试题和面试题,持续更新中...

1.如何显示已加载的内核模块?

lsmod

2. 如何查看linux kernel版本号?

[root@wordpress-187 /]#uname -a
Linux wordpress-187 4.18.0-193.14.2.el8_2.x86_64 #1 SMP Sun Jul 26 03:54:29 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

3.如何查看一个文件依赖的动态链接库?

objdump命令:

[root@wordpress-187 /]#objdump -x /usr/lib64/libc-2.28.so | grep NEEDED
  NEEDED               ld-linux-x86-64.so.2

readelf命令:

[root@wordpress-187 /]#readelf -a /usr/lib64/libc-2.28.so | grep Shared
  Type:                              DYN (Shared object file)
 0x0000000000000001 (NEEDED)             Shared library: [ld-linux-x86-64.so.2]

ldd命令:

[root@wordpress-187 ~]#ldd /usr/lib64/libc-2.28.so
	/lib64/ld-linux-x86-64.so.2 (0x00007f9464be7000)
	linux-vdso.so.1 (0x00007ffde4f73000)

4.linux中在哪里可以配置dns

  • /etc/hosts:利用hosts自动解析域名到ip
  • /etc/resolv.conf:配置dns解析服务器地址
  • /etc/sysconfig/network-scripts/网卡名:网卡配置文件

5. 如何查看logfile最后100行内容

tail -100 ./access.log

6. 如何查看占用80端口的进程

netstat -tunlp | grep 80

7. linux中如何开启ip转发?

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf

8. 如何查看一个目录占用磁盘空间大小?

du -h --max-depth=1

9. 如何设置系统最大文件打开数量限制为55555?

echo "fs.file-max = 55555" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf

10. 说明下列Raid技术至少需要几块磁盘:

Raid0:两块,基于条带化技术将数据轮流写入两块磁盘
Raid1:两块,两块写入相同的数据,其中一块作为数据备份
Raid5:三块,每块数据都写入数据本身和奇偶校验值
Raid10:四块,先做成一组Raid1(两块存储,两块备份),再做Raid0

11. 简述raid0、1、5、10各自的优缺点

Raid 0

优点:读写性能高,磁盘利用率高
缺点:没有数据备份,安全性低

Raid 1

优点:一份数据一份备份,安全性高
缺点:写性能低(写两份)

Raid 5

优点:数据条带化存储在磁盘,读写性能好,磁盘利用率为(n-1)/n
缺点:只能允许坏掉一块盘。

Raid 10

优点:读写性能高,安全性高
缺点:磁盘利用率低,成本高

12.简述虚拟机硬盘扩容的步骤?

  1. 为虚拟机添加硬盘
  2. 重启或重新扫描SCSI总线发现新设备
  3. 根据磁盘大小将其转为MBR或GPT类型
  4. 进行分区操作(fdisk或gdisk)
  5. 格式化文件系统
  6. 配置挂载

13. linux中使用u盘与windows系统交换数据有什么注意点

  1. 需要注意将U盘格式化为能够同时让Windows和Linux识别的文件系统,比如FAT32,exFAT。
  2. Linux需要将U盘挂载后才能读取文件,和Windows不同。

14.简述磁盘无法写入可能得原因?

排除故障的话,可能是

  1. 挂载时使用了只读参数
  2. 磁盘被挂载在某个目录下,而当前操作的用户没有对这个目录的相关权限。

15.如何停止 PID 为 3836 的进程?停止不掉怎么办?再停不掉怎么办?

先kill 3836,默认使用-15信号正常终止进程。如果停不掉可以使用kill -9强制终止。
kill 9也杀不掉要考虑进程可能是僵尸进程,其本身占用的资源已经被释放,但父进程还存在,所以如果可以的话通过终止父进程来杀死这个僵尸进程;
最后一种情况则是进程运行在内核态,内核态忽略一切信号因此无法终止,只能通过重启服务器终止进程。

16.如何使用sed将文件file中所有///替换成aaa?

sed -i 's/\/\/\//aaa/g'

17. 如何添加一个环境变量,立即生效,且重启后生效。

在/etc/profile文件中添加

export PATH="/usr/local/nginx/sbin/:$PATH"

然后source /etc/profile。
如果是只为某个用户添加,可以加载.bashrc或者.bash_profile中。

18. 目录下有文件名为file1,file2,file3,...file10000的10000个文件,如何删除file1001到file2000这1000个文件?

for i in {1001..2000}
do
    rm -f file${i}
done

19. 有一个备份程序mybackup,需要在周一至周五下午1点和晚上8点各运行一次

0 13,16 1,5 * * mybackup

20. 分别写出命令:启动运行docker容器,停止容器,删除一个nginx容器,删除nginx镜像

docker run -d image_name 
docker stop container_id
docker rm container_id
docker rmi nginx:1.14

21. 如何在已经运行的容器里运行bash?

docker exec -it container_id bash

22. 使用vim编辑器将文件中AAA替换为BBB

:进入末行模式
:%s/AAA/BBB/g

23. 永久修改网卡地址

编辑网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0

24. 通过命令行给linux机器添加默认网关10.0.0.254

route add default gw 10.0.0.254

25. 在不unmount的情况下重新设置mount参数

在/etc/fstab写入挂载配置

mount -a

重新读取配置

26. 用iptables写一条放行80端口的防火墙规则

iptables -t filter  -I INPUT -p tcp --dport 80 -j ACCEPT

27. 磁盘容量方面 inode怎么查看

查看inode使用情况

df -i

28. inode满了什么影响

磁盘分区Inode使用率达到100%会造成应用无法继续新建目录或者文件,但是一般此时通常系统内对应的磁盘空间还未用满。可以通过清除Inode占用高的文件或者目录、或者增加Inode数量来解决磁盘分区Inode使用率达到100%的问题。
可以通过df命令查看一些主要目录的inode占用百分比

df -i

解决方法

  1. 清除Inode占用高的文件或者目录
    执行以下命令,分析根目录下的每个二级目录下有多少个文件。
for i in /*; do echo $i; find $i | wc -l; done

逐层进入Inode占用最高的目录,继续执行上述命令,逐步定位占用过高空间的文件或目录,最后进行相应清理。
2. 增加Inode数量
如果不允许清理磁盘中的文件,或者清理完可清理的文件后Inode使用率仍然较高,则可以需要通过备份数据、重新格式化磁盘增加Inode数、拷回数据等步骤,完成数据的保留并增加文件系统Inode数量。
卸载文件系统

umount /占用inode数量多的目录

格式化文件系统

mkfs.xfs /dev/sdb -N 1638400
# 一般根据1:16kb的比例

查看新的inode数量

dumpe2fs -h /dev/xvdb | grep node

29. 怎么查看服务器网络连接情况

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

30. time_wait连接状态多,什么原因,怎么解决

原因

  1. 在高并发的场景下,会出现大量的 TIME_WAIT 连接。
  2. 大量的短连接存在

我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。TCP协议规定TIME_WAIT状态会一直持续2MSL(即两倍的分段最大生存期),以此来确保旧的连接状态不会对新连接产生影响。处于TIME_WAIT状态的连接占用的资源不会被内核释放,所以作为服务器,在可能的情况下,尽量不要主动断开连接,以减少TIME_WAIT状态造成的资源浪费。

解决

  1. 客户端,调整短链接为长链接,HTTP 请求的头部,connection 设置为 keep-alive,保持存活一段时间
  2. 服务器端允许 time_wait 状态的 socket 被重用缩减 time_wait 时间,设置为 1 MSL(即,2 mins)

34. 客户端向服务端发送syn包尝试建立连接,服务端发现该端口连接已经存在,回复客户端什么包

处于 establish 状态的服务端如果收到了客户端的 SYN 报文(注意此时的 SYN 报文其实是乱序的,因为 SYN 报文的初始化序列号其实是一个随机数),会回复一个携带了正确序列号和确认号的 ACK 报文,这个 ACK 被称之为 Challenge ACK。

接着,客户端收到这个 Challenge ACK,发现序列号并不是自己期望收到的,于是就会回 RST 报文,服务端收到后,就会释放掉该连接。

31. docker容器挂了怎么查看问题

可以通过docker inspect查看container状态,然后通过docker logs查看报错日志。

32. docker运行的服务器磁盘占用满了。怎么解决

Docker在不重建容器的情况下,日志文件默认会一直追加,时间一长会逐渐占满服务器的硬盘的空间,内存消耗也会一直增加。
docker logs -f container_name噼里啪啦一大堆很占用空间,致使磁盘空间被占满。

docker system df #查看Docker占用分布 
docker stats #可以查看docker容器的内存占用

定时清理日志

logs=`find /var/lib/docker/containers/ -name *-json.log`
cat /dev/null > $log

控制日志的数量和文件大小

  1. 命令行启动的容器
#docker run时添加--log-opt max-size=500m --log-opt max-file=3参数,如创建并运行
docker run -name xxx -p 80:80 --log-opt max-size=500m  --log-opt max-file=3 xxx:v1 
  1. 通过docker-compose配置的容器
    通过配置容器docker-compose的max-size选项来实现
logging:
      driver: "json-file"
      options:
        max-size: "500m"      # 日志文件大小
        max-file: "6"		# 日志的数量

33. Dockerfile的ADD和COPY有何不同?

ADD命令:将本地文件添加到镜像,支持自动解压tar文件,支持通过URL将网络内容添加到镜像。
COPY命令:只支持将文件和目录从主机文件系统复制到镜像中的指定位置,不能自动解压也不支持网络文件。

39.

By FreelyTomorrow profile image FreelyTomorrow
Updated on
运维技术