Linux 面试题总结

Linux系统部分

1、请描述下linux 系统的开机启动过程

开机加电BIOS自检———–>MBR引导———–>grub引导菜单———–>加载内核———–>启动init进程———–>读取inittab文件———–>启动mingetty进程———–>登录系统

2、删除文件名是乱码的文件

通过inode来删除文件
ls -lhi
657659 -rw-rw-rw- 1 root root    0 Apr  7  2020 README.md
654084 -rw-r--r-- 1 root root 337K Dec 24 08:53 test-1-v1-20200406213113.zip
657652 drwxrwxrwx 2 root root 4.0K Apr  7  2020 чИмхПЦlolшЛ▒щЫДчЪошВд
657658 drwxrwxrwx 3 root root 4.0K Apr  7  2020 чИмхПЦцИСчИ▒цЦЧхЫ╛-(чЖКчМлхЫ╛)
解决:
rm -f `find . -inum 159004`
find . -inum 159004 -exec rm -f {} ;
find -inum 25815|xargs rm -f

3、请执行命令取出 linux 中 eth0 的 IP 地址

方法1
ifconfig eth0|sed -n '2p'|cut -d ":" -f2|cut -d " " -f1

方法2
ifconfig eth0|awk 'NR==2'|awk -F ":" '{print $2}'|awk '{print $1}'

方法3
ifconfig eth0|awk 'NR==2'|awk -F "[: ]+" '{print $4}'

4、如何查看/var/log目录下的文件数?

ls /var/log/ -1R | grep "-" | wc -l

5、如何查看Linux系统每个ip的连接数?

netstat -n | awk ‘/^tcp/ {print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -rn

6、如何查看当前的Linux服务器的运行级别?

who -r和 runlevel 命令可以用来查看当前的Linux服务器的运行级别。

7、如何在/usr目录下找出大小超过10MB的文件?

find /usr -size +10M

8、如何在/home目录下找出120天之前被修改过的文件?

find /home -mtime +120

9、linux系统环境下如何查看系统运行了多长时间?

执行系统命令uptime,其中第三个字段,如下的2:32处则表示系统从上次启动开始已运行了多长时间。
 10:05:18 up  4:31,  4 users,  load average: 0.00, 0.01, 0.05

10、统计ip访问情况,要求分析nginx访问日志,找出访问页面数量在前十位的ip

cat access.log | awk ‘{print $1}’ | uniq -c | sort -rn | head -10

11、如何能把/mnt/test.txt 拷贝到/tmp 不提示的覆盖掉已有的test.txt 文件。

方法1:使用cp命令的全路径./bin/cp复制
方法2:使用cp来取消cp命令默认别名cp -i 选项
方法3:取消别名unalias cp='cp -i'

12、批量随机创建 10 个以 html 结尾的文件

for i in $(seq 1 10);do touch $i.html;done

13、如果向磁盘写入数据提示如下错误:

No space left on device,通过df -h查看磁盘空间,发现没满,请问可能原因是什么?

inode满了-- No space left on device

df -i  来查看

14、/var/log/messages 日志出现 kernel: nf_conntrack: table full, dropping packet.请问是什么原因

导致的?如何解决?

解答:上述结果会让业务访问很慢!各种网络服务耗时大幅上升,各种time out,各种丢包,完全无法正常提供服务,大并发业务场景下,开防火墙很容易出现这种问题.

解决方法1:关闭分防火墙服务

解决方法2:修改内核参数/etc/sysctl.conf

net.nf_conntrack_max= 25000000

net.netfilter.nf_conntrack_max= 25000000

net.netfilter.nf_conntrack_tcp_timeout_established= 180

net.netfilter.nf_conntrack_tcp_timeout_time_wait= 120

net.netfilter.nf_conntrack_tcp_timeout_close_wait= 60

net.netfilter.nf_conntrack_tcp_timeout_fin_wait= 120

但是流量特别大还是会满的.

15、描述Linux下文件删除的原理

Linux系统是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除。一般来说每个文件两个link计数器来控制i_count和i_nlink。当一个文件被一个程序占用的时候i_count就加1。当文件的硬链接多一个的时候i_nlink也加1。删除一个文件,就是让这个文件,没有进程占用,同时i_link数量为0。

16、正在工作的 linux,发现文件系统只读了,你觉得导致问题的原因是什么,如何解决?

文件系统错误
内核相关硬件驱动bug
磁盘坏道
HBA卡故障
RAID卡故障
解决方法:
1.重启系统后看看是否可以自动恢复
2.使用fdisk修复
3.卸载只读的分区,然后重新mount挂载

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

RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据
还有一个大功能,多块盘放在一起可以有冗余(备份)

RAID 0,可以是一块盘和N个盘组合
其优点读写快,是RAID中最好的
缺点:没有冗余,一块坏了数据就全没有了

RAID 1,只能2块盘,盘的大小可以不一样,以小的为准
10G+10G只有10G,另一个做备份。它有100%的冗余,缺点:浪费资源,成本高

RAID 5 ,3块盘,容量计算10*(n-1),损失一块盘
特点,读写性能一般,读还好一点,写不好

18、如何将本地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

19、请用iptables控制来自192.168.1.2主机的80端口请求

 iptables -A INPUT -p tcp -s 192.168.1.2 –dport 80 -j ACCEPT   (允许来自192.168.1.2这台主机访问80端口)

20、局域网的网络地址192.168.1.0/24,局域网络连接其它网络的网关地址是192.168.1.1。如何让192.168.1.20能访问172.16.1.0/24网络

route add –net 172.16.1.0 gw 192.168.1.1 netmask 255.255.255.255 metric 1

21、给你一个端口,如何命令行查出对应的服务是什么?

ss -lntup|grep 22
netstat -lntup|grep -w "22"
lsof -i:22
grep  "22/" /etc/services
nmap -p 22 172.16.1.41
telnet 
nc

22、已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近 7 天的访问日志!请问如何解决? 

find /app/logs/ -type f -mtime +7 -name “*.log”|xargs rm –f

23、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

LVS: 是基于四层的转发
HAproxy: 是基于四层和七层的转发,是专业的代理服务器
Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发

24、简述DNS进行域名解析的过程?

用户要访问www.baidu.com,会先找本机的host文件,再找本地设置的DNS服务器,如果也没有的话,就去网络中找根服务器,根服务器反馈结果,说只能提供一级域名服务器.cn,就去找一级域名服务器,一级域名服务器说只能提供二级域名服务器.com.cn,就去找二级域名服务器,二级域服务器只能提供三级域名服务器.baidu.com.cn,就去找三级域名服务器,三级域名服务器正好有这个网站www.baidu.com,然后发给请求的服务器,保存一份之后,再发给客户端

25、Keepalived的工作原理?

Keepalived是一个基于VRRP协议来实现的服务高可用方案

在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活看,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

26、你常用的Nginx模块,用来做什么

rewrite模块,实现重写功能
access模块:来源控制
ssl模块:安全加密
ngx_http_gzip_module:网络传输压缩模块
ngx_http_proxy_module 模块实现代理
ngx_http_upstream_module模块实现定义后端服务器列表
ngx_cache_purge实现缓存清除功能

27、如何实现 Nginx 代理的节点访问日志记录客户的 IP 而不是代理的 IP?

使用proxy反向代理模块中的proxy_set_header参数
proxy_set_header X-Forwarded-For $remote_addr这是反向代理时,节点服务器获取用户真实IP的必要功能配置

28、查看http的并发请求数与其TCP连接状态

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

29、写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线

for ip in seq 1 255
do
    ping -c 1 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 

 30、误操作 drop 语句导致数据破坏,请给出恢复思想及实际步骤。

使用mysqldump的恢复场景
1.首先立刻停库,不要在写入数据
2.如果MySQL有全量备份并且开启了binlog功能就有很大概率可以恢复
3.首先在全量备份中查找增量备份位置点,然后使用mysqlbinlog导出全量备份以后的增量备份
4.对增量备份中的drop语句进行删除
5.然后首先恢复全量备份
6.最后在恢复处理过后的binlog日志
所使用xtrabackup的恢复场景.

 k8s面试题

1、简要说下Kubernetes有哪些核心组件以及这些组件负责什么工作?

etcd:提供数据库服务保存了整个集群的状态
kube-apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
kube-controller-manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
cloud-controller-manager:是与底层云计算服务商交互的控制器
kub-scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
kubelet:负责维护容器的生命周期,同时也负责Volume和网络的管理
kube-proxy:负责为Service提供内部的服务发现和负载均衡,并维护网络规则
container-runtime:是负责管理运行容器的软件,比如docker

2、你对 Kubernetes 的负载均衡器有什么了解?

负载均衡器,即内部负载均衡器或外部负载均衡器。内部负载均衡器自动平衡负载并使用所需配置分配容器,而外部负载均衡器将流量从外部负载引导至后端容器。

3、经典pod的生命周期

Pod都处于以下几种状态之一,可通过查询Pod详情查看。

Pending 部署Pod事务已被集群受理,但当前容器镜像还未下载完。
Running 所有容器已被创建,并被部署到k8s节点。
Successed Pod成功退出,并不会被重启。
Failed Pod中有容器被终止。
Unknown 未知原因,如kube-apiserver无法与Pod进行通讯。
详细叙述如下:

首先拖取Pod内容器的镜像,选择某个Node节点并启动Pod。 监控Pod状态,若Pod终止则根据策略决定是否重新调度。 Pod退出,并根据策略决定是否重启。

4、详述kube-proxy原理

kube-proxy部署在每个Node节点上,通过监听集群状态变更,并对本机iptables做修改,从而实现网络路由。 而其中的负载均衡,也是通过iptables的特性实现的。

5、deployment/rs的区别

deployment是rs的超集,提供更多的部署功能,如:回滚、暂停和重启、 版本记录、事件和状态查看、滚动升级和替换升级。

6、查看ops这个命名空间下的所有pod,并显示pod的IP地址

kubectl get pods -n ops

7、查看tech命名空间下的pod名称为tech-12ddde-fdfde的日志,并显示最后30行

kubectl logs tech-12ddde-fdfde -n tech|tail -n 30

8、 怎么查看test的命名空间下pod名称为test-5f7f56bfb7-dw9pw的状态

kubectl describe pods test-5f7f56bfb7-dw9pw -n test

9、如何列出所有 namespace 中的所有 pod

kubectl get pods --all-namespaces

10、如何查看test命名空间下的所有ingress

kubectl get ingress -n test

11、如何缩减test命名空间下deployment名称为gitlab的副本数为1

kubectl scale deployment gitlab -n test --replicas=1
原文地址:https://www.cnblogs.com/HByang/p/12652637.html