• 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
  • 相关阅读:
    C++用于修饰的keyword
    UVa 884
    yii 使用 mongodb 小工具 YiiMongoDbSuite
    三种网络协议握手
    学习设计模式的前世今生
    B二分法
    链接链接新手变化需要注意哪些问题
    插值与拟合 课件链接
    UVa 740
    疯狂暑期学习计划~~~
  • 原文地址:https://www.cnblogs.com/HByang/p/12652637.html
Copyright © 2020-2023  润新知